package com.jimikongjian.dao;

import com.jimikongjian.models.Article;
import com.jimikongjian.service.modal.ArticleInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by fuxiuyang on 17/2/20.
 */
public interface IArticle {

    /**
     * 通过文章的id号，获取某一篇文章
     * @param id
     * @return List<Article>
     */
    public List<Article> getArticleListById(@Param("id") int id);

    /**
     * 通过文章的id号，获取某一篇文章
     * @param id
     * @return Article
     */
    public Article getArticleById(@Param("id") int id);

    /**
     * 通过空间的id号，获取该空间的所有的文章内容，并以喜爱程度排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByRoomIdOrderByLike(@Param("roomId") int roomId,
                                                           @Param("start") int start,
                                                           @Param("length") int length);

    /**
     * 通过空间的id号，获取该空间的所有的文章内容，并以时间倒排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByRoomIdOrderByTimeDesc(@Param("roomId") int roomId,
                                                               @Param("start") int start,
                                                               @Param("length") int length);

    /**
     * 通过空间的id号，获取该空间的所有的文章内容，并以喜爱程度正排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByRoomIdOrderByTimeAsc(@Param("roomId") int roomId,
                                                              @Param("start") int start,
                                                              @Param("length") int length);

    /**
     * 通过用户的id号，获取该空间的所有的文章内容，并以喜爱程度排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByUserIdOrderByValue(@Param("userId") int userId,
                                                           @Param("start") int start,
                                                           @Param("length") int length);

    /**
     * 通过用户的id号，获取该空间的所有的文章内容，并以时间倒排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByUserIdOrderByTimeDesc(@Param("userId") int userId,
                                                               @Param("start") int start,
                                                               @Param("length") int length);

    /**
     * 通过用户的id号，获取该空间的所有的文章内容，并以喜爱程度正排序
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByUserIdOrderByTimeAsc(@Param("userId") int userId,
                                                                  @Param("start") int start,
                                                                  @Param("length") int length);

    /**
     * 通过用户的id号，获取该空间的所有的文章内容，并以用户收藏进行查询
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByUserIdOrderByLike(@Param("userId") int userId,
                                                                @Param("start") int start,
                                                                @Param("length") int length);

    /**
     * 通过用户的id号，获取该用户的所有的文章内容
     * @return List<Article>
     */
    public List<ArticleInfo> getArticleListByAuthor(@Param("author") int author,
                                                @Param("start") int start,
                                                @Param("length") int length);

    /**
     * 插入一个新的文章内容
     * @param article
     */
    public void insertArticle(Article article);

    /**
     * 更新一篇文章的内容
     * @param article
     */
    public void updateArticle(Article article);

    /**
     * 文章点击查看数自加1
     * @param id
     */
    public void updateAddArticleClickCount(int id);

    /**
     * 一篇文章喜爱的数量自加1
     * @param id
     */
    public void updateAddArticleLikeCount(int id);

    /**
     * 一篇文章喜爱的数量自减1
     * @param id
     */
    public void updateSubArticleLikeCount(int id);

    /**
     * 更新一篇文章评论的数量自加1
     * @param id
     */
    public void updateAddArticleCommentCount(int id);

    /**
     * 更新一篇文章评论的数量自减1
     * @param id
     */
    public void updateSubArticleCommentCount(int id);

    /**
     * 更新一篇文章点赞的数量自加1
     * @param id
     */
    public void updateAddArticleUpvoteCount(int id);

    /**
     * 更新一篇文章点赞的数量自减1
     * @param id
     */
    public void updateSubArticleUpvoteCount(int id);

    /**
     * 更新一篇文章推荐的权重
     * @param id
     */
    public void updateArticleValue(@Param("id") int id, @Param("value") float value);

    /**
     * 删除某篇文章内容
     * @param article
     */
    public void deleteArticle(Article article);


}
